﻿using SharpCifs.Smb;
using System;

namespace CommonUtils
{
    public class SmbUtil
    {
        public static void Test()
        {
            var client = new SmbClient("192.168.68.1");
            client.RootList().PrintJson();
        }

        public static void Test1()
        {
            var client = new SmbClient("127.0.0.1", "jianglong", "111111");
            client.RootList().PrintJson();
        }

        public static void Test0()
        {
            //using System;
            //using SharpCifs.Smb;
            //设置本地udp广播端口。
            //连接时使用主机名，
            //将默认本地端口(137)更改为大于1024的值。
            //在许多情况下，使用这个著名的港口是受到限制的。
            //
            // **如果可能，使用IP地址而不是主机名
            // **获得更好的性能。
            //
            //SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137");
            //得到本地的工作组
            var lan = new SmbFile("smb://", "");
            var workgroups = lan.ListFiles();
            foreach (var workgroup in workgroups)
            {
                Console.WriteLine($"Workgroup Name = {workgroup.GetName()}");
                try
                {
                    //Get servers in workgroup.
                    var servers = workgroup.ListFiles();
                    foreach (var server in servers)
                    {
                        Console.WriteLine($"{workgroup.GetName()} - Server Name = {server.GetName()}");
                        try
                        {
                            //Get shared folders in server.
                            var shares = server.ListFiles();
                            foreach (var share in shares)
                            {
                                Console.WriteLine($"{workgroup.GetName()}{server.GetName()} - Share Name = {share.GetName()}");
                            }
                        }
                        catch (Exception)
                        {
                            Console.WriteLine($"{workgroup.GetName()}{server.GetName()} - Access Denied");
                        }
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine($"{workgroup.GetName()} - Access Denied");
                }
            }

        }
    }
}
